import java.io.*;
import java.util.Scanner;

// 读取字符
// InputStream 和 OutputStream 是字节流, 单位是字节
// Reader 和 Writer 是 字符流, 单位是字符
public class IODemo9 {
    // 这种写法并不通用
    public static void main1(String[] args){
        try (InputStream inputStream = new FileInputStream("C:/Users/86131/Desktop/Test_IO/test.txt")) {
            byte[] buf = new byte[1024];
            int len;

            while (true) {
                len = inputStream.read(buf);
                // 每次尽量填满 buf, 返回读到的数量
                // 读到末尾，返回-1
                if (len == -1) {
                    // 代表文件已经全部读完
                    break;
                }
                for (int i = 0; i < len; i += 3) {
                    // 每次用 3 个字节进行 utf-8 编码, 得到中文字符
                    String s = new String(buf, i, 3, "UTF-8");
                    System.out.print(s);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 利用 Scanner 读取字符
    public static void main3(String[] args) {
        // 文件必须存在
        try (InputStream inputStream = new FileInputStream("D:/Test_IO/test.txt")) {
            try (Scanner scanner = new Scanner(inputStream, "UTF-8")) {
                while (scanner.hasNext()) {
                    String s = scanner.nextLine();
                    System.out.println(s);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // Reader 读取字符
    public static void main(String[] args) {
        // 文件必须存在
        try (Reader reader = new FileReader("D:/Test_IO/test.txt")) {
            while (true) {
                int c = reader.read();
                if (c == -1) {
                    break;
                }
                System.out.print((char)c);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
